package com.example.untils;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URLDecoder;
import java.util.Properties;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * 配置文件读取工具
 * 
 * @author lli
 *
 * @version 1.0
 *
 */
public class PropertiesUtils {
    /**
     * 全局日志
     */
    private static final Logger LOGGER = LoggerFactory
            .getLogger(PropertiesUtils.class);

    /**
     * "/env.properties" 文件名 (注意：加载的是src下的文件,如果在某个包下．请把包名加上)
     * 因为每次都去读取文件,所以可以不用重启就可以读取改变后的值
     * 
     * @description
     * @author lli
     * @create 2017年4月1日下午3:47:37
     * @version 1.0
     * @param fileName
     * @param key
     * @return
     */
    public static String findPropertiesKey(String fileName, String key) {

        try {
            Properties prop = getProperties(fileName);
            return prop.getProperty(key);
        } catch (Exception e) {
            LOGGER.warn("发生异常：{}", ExceptionUtil.getExceptionAllinformation(e));
            return "";
        }

    }

    /**
     * 
     * @description
     * @author lli
     * @create 2017年4月1日下午3:45:26
     * @version 1.0
     * @param fileName
     * @return
     */
    private static Properties getProperties(String fileName) {

        Properties prop = new Properties();
        InputStreamReader in = null;
        try {
            String savePath = PropertiesUtils.class.getResource(fileName)
                    .getPath();
            /** 对路径有中文或者空格 做转换 */
            savePath = URLDecoder.decode(savePath, "utf-8");
            /** 字符流 解决文件内容中文问题 */
            in = new InputStreamReader(new FileInputStream(savePath), "utf-8");
            prop.load(in);

        } catch (Exception e) {
            LOGGER.warn("发生异常：{}", ExceptionUtil.getExceptionAllinformation(e));
        } finally {
            if (in != null) {
                try {
                    in.close();
                } catch (IOException e) {
                    LOGGER.warn("发生异常：{}",
                            ExceptionUtil.getExceptionAllinformation(e));
                }
            }
        }
        return prop;
    }

    /**
     * 写入properties信息
     * 
     * @param fileName
     *            文件名称
     * 
     * @param key
     *            名称
     * @param value
     *            值
     */
    public static void modifyProperties(String fileName, String key,
            String value) {
        FileOutputStream outputFile = null;
        try {
            // 从输入流中读取属性列表（键和元素对）
            Properties prop = getProperties(fileName);
            prop.setProperty(key, value);
            String path = PropertiesUtils.class.getResource(fileName).getPath();
            outputFile = new FileOutputStream(path);
            prop.store(outputFile, "modify");
        } catch (Exception e) {
            LOGGER.warn("发生异常：{}", ExceptionUtil.getExceptionAllinformation(e));
        } finally {
            try {
                outputFile.close();
                outputFile.flush();
            } catch (IOException e) {
                LOGGER.warn("发生异常：{}",
                        ExceptionUtil.getExceptionAllinformation(e));
            }
        }
    }
}
